/**
 * 环境配置管理
 * 用于uni-app多端环境变量处理
 */

// 默认配置
const defaultConfig = {
  // API接口地址
  VUE_APP_BASE_API: 'http://8.145.55.161:6000',
  
  // WebSocket地址
  VUE_APP_WS_URL: 'wss://ws.oceanbridge.com',
  
  // 文件上传地址
  VUE_APP_UPLOAD_URL: 'https://upload.oceanbridge.com',
  
  // CDN资源地址
  VUE_APP_CDN_URL: 'https://cdn.oceanbridge.com',
  
  // 应用环境
  VUE_APP_ENV: 'production',
  
  // 是否启用mock数据
  VUE_APP_MOCK_ENABLED: false,
  
  // 调试模式
  VUE_APP_DEBUG: false,
  
  // 日志级别
  VUE_APP_LOG_LEVEL: 'error'
}

// 开发环境配置
const developmentConfig = {
  VUE_APP_BASE_API: 'http://8.145.55.161:8000',
  VUE_APP_WS_URL: 'ws://8.145.55.161:8000',
  VUE_APP_UPLOAD_URL: 'http://8.145.55.161:8000',
  VUE_APP_CDN_URL: 'http://8.145.55.161:8000',
  VUE_APP_ENV: 'development',
  VUE_APP_MOCK_ENABLED: false,
  VUE_APP_DEBUG: true,
  VUE_APP_LOG_LEVEL: 'debug'
}

// 测试环境配置
const testConfig = {
  VUE_APP_BASE_API: 'https://test-api.oceanbridge.com',
  VUE_APP_WS_URL: 'wss://test-ws.oceanbridge.com',
  VUE_APP_UPLOAD_URL: 'https://test-upload.oceanbridge.com',
  VUE_APP_CDN_URL: 'https://test-cdn.oceanbridge.com',
  VUE_APP_ENV: 'test',
  VUE_APP_MOCK_ENABLED: false,
  VUE_APP_DEBUG: true,
  VUE_APP_LOG_LEVEL: 'info'
}

/**
 * 获取当前环境
 */
function getCurrentEnvironment() {
  // uni-app环境检测
  if (typeof uni !== 'undefined') {
    // 在uni-app中，我们可以通过编译时注入的变量来判断环境
    // #ifdef MP-WEIXIN
    return 'production' // 微信小程序默认生产环境
    // #endif
    
    // #ifdef H5
    // H5环境可以读取URL参数或localStorage来判断
    if (typeof window !== 'undefined') {
      const urlParams = new URLSearchParams(window.location.search)
      const env = urlParams.get('env') || localStorage.getItem('app_env')
      if (env) return env
    }
    // #endif
    
    // #ifdef APP
    return 'production' // App默认生产环境
    // #endif
  }
  
  // Web环境
  if (typeof process !== 'undefined' && process.env && process.env.NODE_ENV) {
    return process.env.NODE_ENV
  }
  
  // 默认开发环境
  return 'development'
}

/**
 * 获取环境配置
 */
function getEnvConfig() {
  const env = getCurrentEnvironment()
  
  let config = { ...defaultConfig }
  
  switch (env) {
    case 'development':
      config = { ...config, ...developmentConfig }
      break
    case 'test':
      config = { ...config, ...testConfig }
      break
    case 'production':
    default:
      // 使用默认配置
      break
  }
  
  // 尝试从本地存储读取覆盖配置
  if (typeof uni !== 'undefined') {
    try {
      const localConfig = uni.getStorageSync('env_config')
      if (localConfig && typeof localConfig === 'object') {
        config = { ...config, ...localConfig }
      }
    } catch (error) {
      console.warn('读取本地环境配置失败:', error)
    }
  }
  
  return config
}

/**
 * 设置环境配置
 */
function setEnvConfig(newConfig) {
  if (typeof uni !== 'undefined') {
    try {
      const currentConfig = getEnvConfig()
      const mergedConfig = { ...currentConfig, ...newConfig }
      uni.setStorageSync('env_config', mergedConfig)
      return true
    } catch (error) {
      console.error('设置环境配置失败:', error)
      return false
    }
  }
  return false
}

/**
 * 获取指定的环境变量值
 */
function getEnv(key, defaultValue = null) {
  const config = getEnvConfig()
  return config[key] !== undefined ? config[key] : defaultValue
}

/**
 * 判断是否为开发环境
 */
function isDevelopment() {
  return getCurrentEnvironment() === 'development'
}

/**
 * 判断是否为生产环境
 */
function isProduction() {
  return getCurrentEnvironment() === 'production'
}

/**
 * 判断是否为测试环境
 */
function isTest() {
  return getCurrentEnvironment() === 'test'
}

/**
 * 判断是否启用调试模式
 */
function isDebug() {
  return getEnv('VUE_APP_DEBUG', false)
}

/**
 * 判断是否启用Mock数据
 */
function isMockEnabled() {
  return getEnv('VUE_APP_MOCK_ENABLED', false)
}

// 导出环境配置工具
export default {
  getEnvConfig,
  setEnvConfig,
  getEnv,
  getCurrentEnvironment,
  isDevelopment,
  isProduction,
  isTest,
  isDebug,
  isMockEnabled
}

// 单独导出方法
export {
  getEnvConfig,
  setEnvConfig,
  getEnv,
  getCurrentEnvironment,
  isDevelopment,
  isProduction,
  isTest,
  isDebug,
  isMockEnabled
}